home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 11.1 KB | 387 lines |
- 1 KEY(10) ON:ON KEY(10) GOSUB 3
- 2 GOTO 5
- 3 RUN"MENU.BAT"+CHR$(13)
- 5 CLS
- 6 LOCATE 23,24:PRINT "Press F10 to EXIT game.
- 100 REM ------------------------------
- 110 N$= "REAL ESTATE PROGRAMS"
- 120 REM ------------------------------
- 130 GOSUB 6200 'INITIALIZE
- 140 X$(1)="MONTHLY PAYMENT"
- 150 X$(2)="MORTGAGE SCHEDULE"
- 160 X$(3)="REMAINING BALANCE OF LOAN"
- 170 X$(4)="EFFECT OF ACCELERATED PAYMENTS"
- 180 X$(5)="BALLOON PAYMENT CALCULATION"
- 190 X$(6)="AFFORDABLE HOUSE PRICE"
- 200 X$(7)="MORTGAGE WITH SECOND"
- 210 X$(8)="RENTAL PROPERTY"
- 220 N=8 : GOSUB 7000 'DISPLAY MENU
- 230 ON X GOSUB 590,700,880,1040,1430,1600,1830,2110
- 240 Q2$="RUN" : GOSUB 3400
- 241 IF YN$="N" THEN END ELSE 100
- 250 REM ------------------------------
- 260 REM ROUTINE TO CALCULATE PAYMENT
- 270 REM ------------------------------
- 280 REM CALLING PARAMETERS
- 290 REM IN=ANNUAL INTEREST RATE
- 300 REM YR=NO OF YEARS
- 310 REM AM=ANOUNT OF LOAN
- 320 REM
- 330 N1=12*YR :I1=IN/100/12 : V=1/(1+I1) :
- 340 P=AM*I1/(1-V^N1)
- 350 RETURN
- 360 REM ------------------------------
- 370 REM GET INPUT FOR PAYMENT CALC
- 380 REM ------------------------------
- 390 Q1$="SPECIFY PARAMETERS" : Q2$=""
- 400 Q3$="AMOUNT BORROWED ($)" :GOSUB 6600
- 410 Q3$="ANNUAL INT RATE (%) " :GOSUB 6600
- 420 Q3$="TERM OF LOAN (YRS)" :GOSUB 6600
- 430 AM=PAR(1)
- 440 IN=PAR(2)
- 450 YR=PAR(3)
- 460 RETURN
- 470 REM ------------------------------
- 480 REM CALCULATE REMAINING BALANCE
- 490 REM ------------------------------
- 500 REM CALLING PARAMETERS
- 510 REM P=PAYMENT
- 520 REM IN=ANNUAL INTEREST RATE
- 530 REM N=PAYMENT NUMBER
- 540 REM AM = AMOUNT OF LOAN
- 550 FOR I= 1 TO N
- 560 AM= AM-P+IN/12/100*AM
- 570 NEXT I
- 580 RETURN
- 590 REM -----------------------------------
- 600 N$= "MONTHLY PAYMENT CALCULATION"
- 610 REM -----------------------------------
- 620 GOSUB 6200 : K=1 'INITIALIZE
- 630 GOSUB 360 'GET PARAMETERS
- 640 GOSUB 250 'CALCULATE PYMT
- 650 PRINT
- 660 PRINT "MONTHLY PAYMENT IS";TAB(22)
- 670 PRINT USING "$$######,.##"; P
- 680 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 690 IF YN$="N" THEN RETURN ELSE 620
- 700 REM ------------------------------
- 710 N$= "MORTGAGE SCHEDULE"
- 720 REM ------------------------------
- 730 GOSUB 6200 : K=1 'INITIALIZE
- 740 GOSUB 360 'GET LOAN PARAMETERS
- 750 Q3$="YEAR"
- 760 GOSUB 6600 :N=PAR(4) 'GET YEAR
- 770 GOSUB 250 'CALCULATE PAYMENT
- 780 N=12*N-12 'COMPUTE FIRST MONTH
- 790 GOSUB 470 'GET BEGINNING BALANCE
- 800 PRINT " MONTH PRINCIPAL INTEREST BALANCE"
- 810 FOR J=1 TO 12
- 820 I1=IN/12/100*AM : P1=P-I1 :AM=AM-P1 'COMPUTE P & I
- 830 PRINT USING "########,.##";N+1,P1,I1,AM
- 840 N=N+1
- 850 NEXT J
- 860 Q2$="COMPUTE" : GOSUB 3400
- 870 IF YN$="N" THEN RETURN ELSE 700
- 880 REM ------------------------------
- 890 N$= "REMAINING BALANCE"
- 900 REM ------------------------------
- 910 GOSUB 6200 : K=1 'INITIALIZE
- 920 GOSUB 360 'GET LOAN PARAMETERS
- 930 Q3$="PAYMENT NUMBER"
- 940 GOSUB 6600 :N=PAR(4) 'GET PAYMENT NO.
- 950 GOSUB 250 'CALCULATE PAYMENT
- 960 GOSUB 470 'COMPUTE BALANCE
- 970 PRINT
- 980 PRINT "MONTHLY PAYMENT";TAB(22);
- 990 PRINT USING "$$######,.##";P
- 1000 PRINT "BAL AFTER ";N; " PMTS"; TAB(22);
- 1010 PRINT USING "$$######,.##";AM
- 1020 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1030 IF YN$="N" THEN RETURN ELSE 880
- 1040 REM ------------------------------
- 1050 N$= "ACCELERATED PAYMENTS"
- 1060 REM ------------------------------
- 1070 GOSUB 6200 : K=1 'INITIALIZE
- 1080 GOSUB 360 'GET LOAN PARAMETERS
- 1090 Q3$="YEAR OF INCREASE "
- 1100 GOSUB 6600 :N=PAR(4) 'GET YEAR
- 1110 GOSUB 250 'CALCULATE PAYMENT
- 1120 N=12*N-12 'COMPUTE FIRST MONTH
- 1130 Q3$="EXTRA AMOUNT PAID ($)"
- 1140 GOSUB 6600 : EX=PAR(5) 'GET EXTRA
- 1150 REM COMPUTE PRIN INT AND BAL TO DATE
- 1160 TI=0 : BAL=0 : TP=0
- 1170 FOR J=1 TO N
- 1180 I1=IN/12/100*AM : P1=P-I1 : AM=AM-P1
- 1190 TI=TI+I1 : TP=TP+P1
- 1200 NEXT J
- 1210 REM COMPUTE INTEREST WITH NO INCREASE
- 1220 TI2=0 : AM2=PAR(1)
- 1230 FOR J=1 TO 12*YR
- 1240 I2=IN/12/100*AM2 : P2=P-I2 :AM2=AM2-P2
- 1250 TI2=TI2+I2
- 1260 NEXT J
- 1270 REM COMPUTE WITH XTRA PAYMENT
- 1280 J=0
- 1290 I1=IN/12/100*AM: TI=TI+I1
- 1300 P1=P+EX-I1 : TP=TP+P1
- 1310 AM=AM-P1
- 1320 J=J+1
- 1330 IF AM >0 THEN 1290
- 1340 PRINT
- 1350 PRINT "YEARS TO PAY OFF";TAB(25);
- 1360 PRINT USING "######,.##";PAR(4)+J/12-1
- 1370 PRINT "TOTAL INTEREST PAID";TAB(22);
- 1380 PRINT USING "$$######,.##";TI
- 1390 PRINT "INTEREST SAVED";TAB(22)
- 1400 PRINT USING "$$######,.##";TI2-TI
- 1410 Q2$="COMPUTE" : GOSUB 3400
- 1420 IF YN$="N" THEN RETURN ELSE 1040
- 1430 REM ------------------------------
- 1440 N$= "BALLOON PAYMENT"
- 1450 REM ------------------------------
- 1460 GOSUB 6200 : K=1 'INITIALIZE
- 1470 GOSUB 360 'GET LOAN PARAMETERS
- 1480 Q3$="YEAR LOAN DUE"
- 1490 GOSUB 6600 :N=12*PAR(4) 'GET YEAR DUE
- 1500 GOSUB 250 'CALCULATE PAYMENT
- 1510 GOSUB 470 'COMPUTE BALANCE
- 1520 PRINT
- 1530 PRINT "MONTHLY PAYMENT";TAB(22);
- 1540 PRINT USING "$$######,.##";P
- 1550 PRINT : PRINT "BALLOON PAYMENT"
- 1560 PRINT "AFTER ";N/12; " YEARS"; TAB(22);
- 1570 PRINT USING "$$######,.##";AM
- 1580 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1590 IF YN$="N" THEN RETURN ELSE 1430
- 1600 REM -----------------------------
- 1610 N$= "AFFORDABLE HOUSE PRICE"
- 1620 REM -----------------------------
- 1630 GOSUB 6200 : K=1 'INITIALIZE
- 1640 Q1$="SPECIFY PARAMETERS" : Q2$=""
- 1650 Q3$="ANNUAL INT RATE (%) " : GOSUB 6600
- 1660 Q3$="TERM OF LOAN (YRS)" : GOSUB 6600
- 1670 Q3$="BUYERS ANNUAL INC" : GOSUB 6600
- 1680 Q3$="EST ANNUAL TAX & INS" : GOSUB 6600
- 1690 Q3$="% OF INC FOR PAYMENTS" : GOSUB 6600
- 1700 Q3$="% DOWN PAYMENT" : GOSUB 6600
- 1710 PRINT
- 1720 REM COMPUTE ALLOWABLE PAYMENT
- 1730 P=PAR(5)/100*PAR(3)/12 - PAR(4)/12
- 1740 REM COMPUTE AMOUNT FINANCED
- 1750 IN=PAR(1)/100/12 :N1=12*PAR(2) : V=1/(1+IN)
- 1760 AM=P*(1-V^N1)/IN
- 1770 PRINT "AMOUNT FINANCED";TAB(22);
- 1780 PRINT USING "$$######,.##";AM
- 1790 PRINT "AFFORDABLE HOUSE"; TAB(22);
- 1800 PRINT USING "$$######,.##";AM/(1-PAR(6)/100)
- 1810 Q2$="COMPUTE" : GOSUB 3400
- 1820 IF YN$="N" THEN RETURN ELSE 1600
- 1830 REM -----------------------------
- 1840 N$= "MORTGAGE WITH SECOND"
- 1850 REM -----------------------------
- 1860 GOSUB 6200 : K=1
- 1870 Q1$="SPECIFY PARAMETERS" : Q2$=""
- 1880 Q3$="PURCHASE PRICE ($)" : GOSUB 6600
- 1890 Q3$="CASH AVAILABLE ($)" : GOSUB 6600
- 1900 Q3$="FIRST MORT ($)" : GOSUB 6600
- 1910 Q3$="FIRST RATE (%)" : GOSUB 6600
- 1920 Q3$="FIRST TERM (YRS)" : GOSUB 6600
- 1930 Q3$="SECOND RATE (%)" : GOSUB 6600
- 1940 PRINT
- 1950 AM=PAR(3) : IN=PAR(4) : YR=PAR(5)
- 1960 REM COMPUTE FIRST PAYMENT
- 1970 GOSUB 250
- 1980 PRINT "PAYMENT (FIRST)";TAB(22);
- 1990 PRINT USING "$$######,.##";P
- 2000 REM COMPUTE 2ND PAYMENT
- 2010 IF PAR(2) < PAR(1)-PAR(3) THEN GOTO 2040
- 2020 PRINT "SECOND MORTGAGE NOT REQUIRED"
- 2030 GOTO 2090
- 2040 PRINT "PAYMENT (SECOND)";TAB(22)
- 2050 P2=(PAR(1)-PAR(2)-PAR(3))*PAR(6)/100/12
- 2060 PRINT USING "$$######,.##";P2
- 2070 PRINT "TOTAL PAYMENTS";TAB(22);
- 2080 PRINT USING "$$######,.##";P+P2
- 2090 Q2$="COMPUTE" : GOSUB 3400
- 2100 IF YN$="N" THEN RETURN ELSE 1830
- 2110 REM -----------------------------
- 2120 N$= "RENTAL PROPERTY ANALYSIS"
- 2130 REM -----------------------------
- 2140 GOSUB 6200 : K=1
- 2150 REM GET PARAMETERS
- 2160 GOSUB 360
- 2170 Q3$="ANNUAL INSURANCE ($)" : GOSUB 6600
- 2180 Q3$="ANNUAL TAXES ($)" : GOSUB 6600
- 2190 Q3$="ANNUAL MAINT ($)" : GOSUB 6600
- 2200 Q3$="MONTHLY INCOME ($)" : GOSUB 6600
- 2210 GOSUB 250 'CALCULATE PYMT
- 2220 PRINT
- 2230 PRINT "MONTHLY PAYMENT IS";TAB(22);
- 2240 PRINT USING "$$######,.##";P
- 2250 PRINT "MONTHLY CASH FLOW";TAB(22);
- 2260 CF=PAR(7)-P-(PAR(4)+PAR(5)+PAR(6))/12
- 2270 PRINT USING "$$######,.##";CF
- 2280 Q2$="COMPUTE" : GOSUB 3400
- 2290 IF YN$="N" THEN RETURN ELSE 2110
- 3400 REM "ANOTH"
- 3401 ' --------------------------------
- 3402 ' ASK FOR ANOTHER RUN
- 3403 '
- 3404 'THIS ROUTINE ASKS THE USER WHETHER TO CONTINUE
- 3405 '
- 3406 'CALLING PARAMETERS:
- 3407 ' Q2$= STRING TO SPECIFY WHAT OPERATION TO DO
- 3408 '
- 3409 'RETURNED PARAMETERS:
- 3410 ' YN$= A "Y" OR "N" FOR YES OR NO
- 3411 '
- 3412 ' --------------------------------
- 3420 Q1$="WOULD YOU LIKE TO "
- 3430 Q3$="AGAIN Y OR N ?"
- 3440 GOSUB 5000 'PRESENT DIALOG
- 3450 GOSUB 7800 'ASK YES OR NO
- 3460 RETURN
- 5000 REM "DIALOG"
- 5001 ' -------------------------------
- 5002 ' DIALOGUE
- 5003 '
- 5004 'CALLING PARAMETERS:
- 5005 ' Q1$,Q2$,Q3$, = QUESTIONS TO DISPLAY
- 5006 '
- 5007 'RETURNED PARAMETERS:
- 5008 ' NONE
- 5009 '
- 5010 'COMMENT: UNUSED QUESTION STRINGS SHOULD BE SET
- 5011 ' TO NULL ("")
- 5012 '
- 5013 ' -------------------------------
- 5020 FOR I= 20 TO 23
- 5030 LOCATE I,1
- 5040 IF I > 20 THEN 5080
- 5050 FOR J= 1 TO 40 'DRAW A BORDER
- 5060 PRINT "-";
- 5070 NEXT J
- 5080 IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
- 5090 IF I = 22 THEN PRINT Q2$; 'SECOND QUESTION
- 5100 IF I = 23 THEN PRINT Q3$; 'THIRD QUESTION
- 5109 REM RESTORE CURSOR HERE AFTER 3RD QUEST
- 5110 CP1=POS(N)
- 5120 CP=POS(N) 'CURSOR COLUMN POSITION
- 5130 IF CP>40 THEN 5150
- 5140 PRINT " "; : GOTO 5120 'ERASE ANY PRIOR INFO
- 5149 REM RESTORE CURSOR FOR USER RESPONSE
- 5150 LOCATE I,CP1
- 5160 NEXT I
- 5170 RETURN
- 5400 REM "INCH"
- 5401 ' ------------------------------
- 5402 ' INPUT CHARACTER
- 5403 '
- 5404 'CALLING PARAMETERS:
- 5405 ' NONE
- 5406 '
- 5407 'RETURNED PARAMETERS:
- 5408 ' CH$=INPUT CHARACTER
- 5409 '
- 5410 ' ------------------------------
- 5420 REM WAIT FOR INPUT CHARACTER
- 5430 CH$= INKEY$ : IF CH$="" THEN 5430
- 5440 Z=ASC(CH$)
- 5450 IF Z < 97 OR Z > 122 THEN 5470
- 5460 Z=Z-32
- 5470 CH$=CHR$(Z)
- 5480 RETURN
- 6200 REM "INIT"
- 6201 '----------------------------------
- 6202 ' INITIALIZE DISPLAY
- 6203 '
- 6204 'THIS ROUTINE CLEARS THE SCREEN
- 6205 ' AND PRINTS THE PROGRAM TITLE
- 6206 'CALLING PARAMETERS:
- 6207 ' N$=TITLE OF PROGRAM
- 6208 '
- 6209 'RETURNED PARAMETERS:
- 6210 ' NONE
- 6211 '
- 6212 ' ----------------------------------
- 6220 CLS 'CLEAR SCREEN
- 6230 PRINT N$ : PRINT 'TITLE
- 6240 KEY OFF
- 6250 RETURN
- 6600 REM "INPAR"
- 6601 ' --------------------------------
- 6602 ' INPUT PARAMETERS
- 6603 '
- 6604 'CALLING PARAMETERS:
- 6605 ' Q1$,Q2$=USER INSTRUCTIONS
- 6606 ' Q3$=NAME OF DATA ITEM
- 6607 '
- 6608 'RETURNED PARAMETERS:
- 6609 ' PAR(K)=THE DATA ITEM OBTAINED
- 6610 '
- 6611 'COMMENT: CALL WITH K=1 FOR FIRST DATA ITEM
- 6612 ' K AUTOMATICALLY UPDATED
- 6613 '
- 6614 ' -------------------------------
- 6620 GOSUB 5000 'ASK QUESTIONS
- 6630 INPUT PAR(K) 'GET VALUE
- 6640 REM ECHO QUESTION AND ANSWER
- 6650 LOCATE K+2,3
- 6660 PRINT Q3$; TAB(24);
- 6670 PRINT USING "######,.##"; PAR(K)
- 6680 K=K+1
- 6690 RETURN
- 7000 REM "MENU"
- 7001 ' ------------------------------
- 7002 ' MENU PROGRAM
- 7003 '
- 7004 'THIS PROGRAM DISPLAYS A MENUE
- 7005 ' AND CHOOSES A PROGRAM
- 7006 'CALLING PARAMETERS:
- 7007 ' N= NO. OF MENU ITEMS
- 7008 ' X$(I)= ARRAY OF PROGRAM NAMES
- 7009 '
- 7010 'RETURNED PARAMETERS:
- 7011 ' X=PROGRAM NUMBER CHOSEN
- 7012 '
- 7013 ' ------------------------------
- 7020 CLS
- 7030 FOR I = 1 TO N 'DISPLAY MENU
- 7040 IF I=10 THEN PRINT 0; ELSE PRINT I;
- 7050 PRINT "= " ; X$(I)
- 7060 NEXT I
- 7070 Q1$="" : Q2$=""
- 7080 Q3$="CHOOSE PROGRAM :"
- 7085 PRINT:PRINT " F10 to EXIT"
- 7090 GOSUB 5000 'ASK QUESTIONS
- 7100 GOSUB 5400 'INPUT CHAR
- 7110 X= VAL(CH$)
- 7119 REM SEE IF CHAR IN RANGE
- 7120 IF X>=1 AND X<=N THEN RETURN
- 7130 IF X=0 AND N=10 THEN 7140 ELSE 7150
- 7140 X=10 : RETURN
- 7150 Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
- 7160 GOSUB 5000
- 7170 GOTO 7100
- 7800 REM "YESNO"
- 7801 ' -------------------------------
- 7802 ' YES-NO
- 7803 '
- 7804 'CALLING PARAMETERS:
- 7805 ' NONE
- 7806 '
- 7807 'RETURNED PARAMETERS:
- 7808 ' YN$= CONTAINS A Y OR N
- 7809 '
- 7810 ' -------------------------------
- 7815 LOCATE 23,24:PRINT "Press F10 to EXIT program.
- 7820 REM WAIT FOR KEY TO BE STRUCK
- 7830 YN$=INKEY$ : IF YN$="" THEN 7830
- 7840 IF YN$="y" THEN YN$="Y"
- 7850 IF YN$="n" THEN YN$="N"
- 7860 IF YN$ = "Y" OR YN$ = "N" THEN 7890
- 7870 REM NOT YES OR NO TRY AGAIN
- 7880 GOTO 7830
- 7890 GOTO 110
-